package consecutiveNumbersSum

import "math"

/**
给定一个正整数 N，试求有多少组连续正整数满足所有数字之和为 N
*/
/*
N是连续K个正整数相加
N = (x + 1) + (x + 2) + ~~~ +(x + k), 0<x<=k<=N
N = kx + (1+k)·k / 2，使用放缩法得到 2N = k·(2x+k+1)> k²,即 k < 根号2N
kx = N - (1+k)·k / 2，满足这个等式的K，X 即可
x = （N - (1+k)·k / 2) / k， x为正整数
*/
func consecutiveNumbersSum(n int) int {
	num := 1
	limit := math.Sqrt(float64(2 * n))
	for i := 2; i < int(limit); i++ {
		if (n-i*(i+1)/2)%i == 0 {
			num++
		}
	}
	return num
}
